package logica.DAO;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

import objetosNegocio.Inventario;
import objetosNegocio.LineaInventario;

public class DAOInventario implements InterfazDAOInventario{
	
	private DAOConnection connection; //Conexion a BBDD
	
	/**
	 * @param connection - Objeto que encapsula la conexion a la bbdd
	 */
	public DAOInventario(DAOConnection connection){
		this.connection = connection;
	}

	@Override
	public boolean insertarRegistro(LineaInventario datos) throws SQLException {
		boolean insertado = false;
		Statement stmt = null;
				
		String sentenciaSQL = "";  		//Siempre se inserta el registro como activo (valor 0)
		sentenciaSQL = "INSERT INTO gesal.Inventario (idAlmacen,idProducto,cantidad,stockMin,stockMax) VALUES (";
		sentenciaSQL+= datos.getIdAlmacen() + "," + datos.getIdProducto() + ",";
		sentenciaSQL+= datos.getCantidad() + "," + datos.getStockMin() + "," + datos.getStockMax() + ")";
		
		stmt = connection.getConnection().createStatement();
		if ((stmt.executeUpdate(sentenciaSQL))==1) insertado=true;
		stmt.close();
		
		return insertado;
	}

	@Override
	public boolean modificarRegistro(LineaInventario datos) throws SQLException {
		boolean modificado = false;
		Statement stmt = null;
		
		String sentenciaSQL = "";
		sentenciaSQL = "UPDATE gesal.Inventario SET";
		sentenciaSQL+= " cantidad=" + datos.getCantidad() + ",";
		sentenciaSQL+= " stockMin=" + datos.getStockMin() + ",";
		sentenciaSQL+= " stockMax=" + datos.getStockMax();
		sentenciaSQL+= " WHERE idAlmacen=" + datos.getIdAlmacen() + " AND idProducto=" + datos.getIdProducto();
		
		stmt = connection.getConnection().createStatement();
		if ((stmt.executeUpdate(sentenciaSQL))==1) modificado=true;
		stmt.close();
		
		return modificado;
	}


	@Override
	public LineaInventario obtenerRegistro(int idAlmacen, int idProducto) throws SQLException{
		ResultSet resul = null;
		Statement stmt = null;
		LineaInventario datos = null;
		
		String sentenciaSQL = "";
		sentenciaSQL = "SELECT idAlmacen,idProducto,cantidad,stockMin,stockMax";
		sentenciaSQL+= " FROM gesal.Inventario WHERE idAlmacen=" + idAlmacen + " AND idProducto=" + idProducto ;
		
		stmt = connection.getConnection().createStatement();
		resul = stmt.executeQuery(sentenciaSQL);
		
		//Si se encuentra el registro se tratan los datos
		if (resul.next()){  
			datos= new LineaInventario();	
			datos.setIdAlmacen(resul.getInt("idAlmacen"));
			datos.setIdProducto(resul.getInt("idProducto"));
			datos.setCantidad(resul.getInt("cantidad"));
			datos.setStockMin(resul.getInt("stockMin"));
			datos.setStockMax(resul.getInt("stockMax"));
		}
		
		resul.close();
		stmt.close();
	
		return datos;
	}

	@Override
	public Inventario obtenerInventario_ProductosActivos_Almacen(int cod_almacen) throws SQLException {
		return obtenerInventario(cod_almacen,true);
	}

	@Override
	public Inventario obtenerInventario_ALLProductos_Almacen(int cod_almacen) throws SQLException{
		return obtenerInventario(cod_almacen,false);
	}

	
	private Inventario obtenerInventario(int cod_almacen, boolean soloActivos) throws SQLException{
		ResultSet resul = null;
		Statement stmt = null;
		
		LineaInventario datos = null;
		Inventario listado = new Inventario();
		
		String sentenciaSQL = "";
		sentenciaSQL = "SELECT idAlmacen,idProducto,cantidad,stockMin,stockMax FROM gesal.Inventario WHERE idAlmacen=" + cod_almacen;
		if (soloActivos)
			sentenciaSQL+= " AND idProducto IN (SELECT idProducto FROM gesal.Producto WHERE activo=0)";
		
		stmt = connection.getConnection().createStatement();
		resul = stmt.executeQuery(sentenciaSQL);
		
		//Si se encuentra el registro se tratan los datos
		while (resul.next()){  
			datos= new LineaInventario();	
			datos.setIdAlmacen(resul.getInt("idAlmacen"));
			datos.setIdProducto(resul.getInt("idProducto"));
			datos.setCantidad(resul.getInt("cantidad"));
			datos.setStockMin(resul.getInt("stockMin"));
			datos.setStockMax(resul.getInt("stockMax"));
			listado.add(datos);
		}
		
		resul.close();
		stmt.close();
		return listado;
		
	}

	

}
